//@author A0088797Y
/**********************************************************************************************************
Name: UserInterface
Type: Class
Purpose: Serves as the user interface that interacts with the user. 
		 It reads user commands and inputs. Then, executes them by calling the Logic Class.
		 It is also responsible for printing the output.
		 It is also responsible for throwing exceptions and printing help messages
**********************************************************************************************************/

#pragma once

#include "Logic.h"

#include <string>
#include <iostream>


class UserInterface
{
private:
	Logic* _logPtr;

	/****************************************************************************************************	
	Name: read
	Type: Method
	Purpose: Read input entered in CLI.
	****************************************************************************************************/
	std::string read(void);

	/****************************************************************************************************	
	Name: printOutput
	Type: Method
	Purpose: Prints input string with endline appended to the end.
	****************************************************************************************************/
	void printOutput(std::string);

public:
	UserInterface(Logic*);
	~UserInterface(void);

	/****************************************************************************************************	
	Name: run
	Type: Method
	Purpose: Runs the UserInterface class.
	****************************************************************************************************/
	void run(void);
};

